Introduction: Mapping
of broad research field around EIST in v2
Here are preliminary results of the bibliometric mapping of EIST. Its
purpose is:
- To map the broader research community and distinct research field
the department contributes to.
- Identify core knowledge bases, research areas gtrends and
topics.
- Highlight the positioning of the department within this
dynamics.
The method for the research-field-mapping can be reviewed here:
Rakas, M.,
& Hain, D. S. (2019). The state of innovation system research: What
happens beneath the surface?. Research Policy, 48(9), 103787.
Note: The analysis in this document depicts the
larger research field around the department, thereby all
analysis results are based on the publications of the department plus
related
Error in plot(., k = 10, pause = FALSE) : object 'results' not found
—>
General Overview over
the research field
Note: This section provides basic descriptives of th
identified research fielld, including number of articles over time,
countries, institutions, and authors. See
Technical descriptionfor additional explanations.
Main Indicators:
Publications, Authors, Countries
Connection between
the research field’s Top Authors-Keywords-Journals
Topic modelling
Note: Here, we report the results of a LDA
topic-modelling (basically, clustering on words) on all title+abstract
texts. Identified topics can be interpreted as broad themes in the
research field. See Technical descriptionfor additional
explanations.
Knowledge Bases:
Co-Citation network analysis
Note: This analysis refers the co-citation analysis,
where the cited references and not the original publications are the
unit of analysis. Identified knowledge bases can be interpreted as the
knowledge foundation the field draws from. See
Technical descriptionfor additional explanations.
Research Areas:
Bibliographic coupling analysis
Note: This analysis refers the bibliographic
coupling analysis, where original publications are the unit of analysis.
Identified research areas can be interpreted as the field’s current
research frontier. See Technical descriptionfor additional
explanations.

Knowledge Bases,
Research Areas & Topics Interaction
Joint Overview over
Knowledge Bases, Research Areas, and Topics
This plot shows the connection of publications in the research areas
to knowledge bases (by citations) and topics (by gamma, document-topic
weight)

Collaboration

Collaboration
network
LS0tCnRpdGxlOiAiTHV4ZW1ib3VyZyBSZXNlYXJjaCBFdmFsdWF0aW9uIDIwMjI6IEZpZWxkIE1hcHBpbmcgb2YgS25vd2xlZGdlIFN0cnVjdHVyZSIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2M6IGZhbHNlCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQpwYXJhbXM6CiAgICBpbnN0aXR1dGU6IAogICAgICAgdmFsdWU6IG51bGwKICAgIGRlcGFydG1lbnQ6CiAgICAgICB2YWx1ZTogbnVsbAotLS0KCjwhLS0tCiMgQWRkIHRvIFlBTUwgd2hlbiBjb21waWxpbmcgaHRtbCAtLTwgd2hlbiByZXZpZXdpbmcgY2hhbmdlIGZpcnN0IGxpbmUgdG86IGh0bWxfbm90ZWJvb2sKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jOiBmYWxzZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKCiMgQWRkIHdoZW4gY29tcGlsaW5nIHBkZgojIEFkZCB0byBZQU1MIHdoZW4gY29tcGlsaW5nIGh0bWwKICAgYm9va2Rvd246OnBkZl9kb2N1bWVudDI6IAogICAgZmlnX2NhcHRpb246IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgZ2xvYmFsX251bWJlcmluZzogdHJ1ZQotLS0+CgoKYGBgez1odG1sfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTIwMHB4OwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQo8L3N0eWxlPgpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIyMgR2VuZXJpYyBwcmVhbWJsZQojcm0obGlzdD1scygpKQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQpvcHRpb25zKHNjaXBlbiA9IDUpCnNldC5zZWVkKDEzMzcpCgojIyMgTG9hZCBwYWNrYWdlcyAgCiMgZ2VuZXJhbApsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeSh3aWR5cikKCiMgS2libGlvICYgTlcKbGlicmFyeShiaWJsaW9tZXRyaXgpCmxpYnJhcnkodGlkeWdyYXBoKQpsaWJyYXJ5KGdncmFwaCkKCiMgTkxQCmxpYnJhcnkodGlkeXRleHQpCgojIERhdGF2aXoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHBhdGNod29yaykKCiMgS25pdApsaWJyYXJ5KGtuaXRyKSAjIEZvciBkaXNwbGF5IG9mIHRoZSBtYXJrZG93bgpsaWJyYXJ5KGthYmxlRXh0cmEpICMgRm9yIHRhYmxlIHN0eWxpbmcKCiMgb3duIGZ1bmN0aW9ucwpzb3VyY2UoIi4uL2Z1bmN0aW9ucy9mdW5jdGlvbnNfYmFzaWMuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19zdW1tYXJ5LlIiKQpzb3VyY2UoIi4uL2Z1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQoKIyBLbml0ciBvcHRpb25zCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBXaGVuIGRvaW5nIGl0IGhlcmUgaW4gdGhlIG5vdGVib29rCnZhcl9pbnN0IDwtICdFSVNUJwp2YXJfZGVwdCA8LSAndjInCgojIFdoZW4gY2FsbGluZyBmcm9tIGEgaGlnaGVydCBsZXZlbCBzY3JpcHQKI3Zhcl9pbnN0IDwtIHBhcmFtcyRpbnN0aXR1dGUKI3Zhcl9kZXB0IDwtIHBhcmFtcyRkZXBhcnRtZW50CmBgYAoKIyBJbnRyb2R1Y3Rpb246IE1hcHBpbmcgb2YgYnJvYWQgcmVzZWFyY2ggZmllbGQgYXJvdW5kIGByIHZhcl9pbnN0YCBpbiBgciB2YXJfZGVwdGAKCkhlcmUgYXJlIHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgdGhlIGJpYmxpb21ldHJpYyBtYXBwaW5nIG9mIEVJU1QuIEl0cyBwdXJwb3NlIGlzOgoKKiBUbyBtYXAgdGhlIGJyb2FkZXIgcmVzZWFyY2ggY29tbXVuaXR5IGFuZCBkaXN0aW5jdCByZXNlYXJjaCBmaWVsZCB0aGUgZGVwYXJ0bWVudCBjb250cmlidXRlcyB0by4KKiBJZGVudGlmeSBjb3JlIGtub3dsZWRnZSBiYXNlcywgcmVzZWFyY2ggYXJlYXMgZ3RyZW5kcyBhbmQgdG9waWNzLgoqIEhpZ2hsaWdodCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGRlcGFydG1lbnQgd2l0aGluIHRoaXMgZHluYW1pY3MuCgpUaGUgbWV0aG9kIGZvciB0aGUgcmVzZWFyY2gtZmllbGQtbWFwcGluZyBjYW4gYmUgcmV2aWV3ZWQgaGVyZToKCltSYWthcywgTS4sICYgSGFpbiwgRC4gUy4gKDIwMTkpLiBUaGUgc3RhdGUgb2YgaW5ub3ZhdGlvbiBzeXN0ZW0gcmVzZWFyY2g6IFdoYXQgaGFwcGVucyBiZW5lYXRoIHRoZSBzdXJmYWNlPy4gUmVzZWFyY2ggUG9saWN5LCA0OCg5KSwgMTAzNzg3Ll0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5yZXNwb2wuMjAxOS4wNC4wMTEpCgoqKk5vdGU6KiogVGhlIGFuYWx5c2lzIGluIHRoaXMgZG9jdW1lbnQgZGVwaWN0cyB0aGUgKmxhcmdlciByZXNlYXJjaCBmaWVsZCogYXJvdW5kIHRoZSBkZXBhcnRtZW50LCB0aGVyZWJ5IGFsbCBhbmFseXNpcyByZXN1bHRzIGFyZSBiYXNlZCBvbiB0aGUgcHVibGljYXRpb25zIG9mIHRoZSBkZXBhcnRtZW50IHBsdXMgcmVsYXRlZCAKCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBMb2FkIGRhdGEKTSA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9NXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIGFzX3RpYmJsZSgpICU+JSAKICBkaXN0aW5jdChVVCwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIGZpbHRlcihQWSA+PSBQWV9taW4sIFBZIDw9IFBZX21heCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JQogICAgbXV0YXRlKFRDX2NvaG9ydF9yYW5rID0gcGVyY2VudF9yYW5rKFRDKSkgJT4lCiAgdW5ncm91cCgpIApgYGAKCmBgYHtyfQpjb21fbGFiZWxzIDwtIHJlYWRfY3N2MignLi4vZGF0YS9jb21tdW5pdHlfbGFiZWxpbmcuY3N2JykgICU+JSBmaWx0ZXIoaW5zdGl0dXRlID09IHZhcl9pbnN0LCBkZXBhcnRtZW50ID09IHZhcl9kZXB0KSAlPiUgYXJyYW5nZShpbnN0aXR1dGUsIGRlcGFydG1lbnQsIHR5cGUsIGNvbSkgJT4lIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogJywgbGFiZWwpKSkKYGBgCjwhLS0tCiMgU2VlZCBBcnRpY2xlcwoKKipOb3RlOioqIFRoZSBzZWVkIGFydGljbGVzIGRlZW1lZCByZXByZXNlbnRhdGl2ZSBmb3IgdGhlIGFjdGl2ZSBhcmVhcyBvZiByZXNlYXJjaCBpbiB0aGUgaW5zdGl0dXRpb24sIGFuZCBpbmNsdWRlIGF1dGhvcnMgYWZmaWxpYXRlZCB3aXRoIHRoZSBpbnN0aXR1dGlvbi4gVGhlIGRlcGFydG1lbnRzIHJlc2VhcmNoIGZpZWxkIGlzIGlkZW50aWZpZWQgYnkgc2VsZWN0aW5nIHRoZSAyMDAwIG1vc3Qgc2ltaWxhciBwdWJsaWNhdGlvbnMgdG8gdGhlIHNlbGVjdGVkIHNlZWQgYXJ0aWNsZXMuIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpzZWVkIDwtY29udmVydDJkZihmaWxlID0gcGFzdGUwKCcuLi8uLi9kYXRhL3NlZWRzL3Njb3B1c18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICdfc2VlZF9zZWxlY3QuY3N2JyksIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUKICBhc190aWJibGUoKSAlPiUKICBtdXRhdGUoc2VlZCA9IFRSVUUpIApgYGAKCmBgYHtyfQpzZWVkICU+JQogIHNlbGVjdChBVSwgUFksIFRJLCBKSSkgJT4lCiAgbXV0YXRlKEFVID0gQVUgJT4lIHN0cl90cnVuYygzMCksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMDApLAogICAgICAgICBKSSA9IEpJICU+JSBzdHJfdHJ1bmMoMzApKSAlPiUKICBrYWJsZSgpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCi0tLT4KCiMgR2VuZXJhbCBPdmVydmlldyBvdmVyIHRoZSByZXNlYXJjaCBmaWVsZAoKKipOb3RlOioqIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBiYXNpYyBkZXNjcmlwdGl2ZXMgb2YgdGggaWRlbnRpZmllZCByZXNlYXJjaCBmaWVsbGQsIGluY2x1ZGluZyBudW1iZXIgb2YgYXJ0aWNsZXMgb3ZlciB0aW1lLCBjb3VudHJpZXMsIGluc3RpdHV0aW9ucywgYW5kIGF1dGhvcnMuIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIHJlc3VsdHMgPC0gYmlibGlvQW5hbHlzaXMoTSwgc2VwID0gIjsiKQpyZXN1bHRzIDwtIHJlYWRfcmRzKHBhc3RlMCgnLi4vLi4vdGVtcC9NX3Jlc18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKIyMgTWFpbiBJbmRpY2F0b3JzOiBQdWJsaWNhdGlvbnMsIEF1dGhvcnMsIENvdW50cmllcyAKCmBgYHtyfQpyZXN1bHRzICU+JSBwbG90KGsgPSAxMCwgcGF1c2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KcHJvZF9BVSA8LSBNICU+JSBhdXRob3JQcm9kT3ZlclRpbWUoayA9IDEwLCBncmFwaCA9IFRSVUUpCiNwbG90KHByb2RfQVUkZ3JhcGgpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHJlc3VsdHMsIHByb2RfQVUpCmBgYAoKIyMgQ29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZXNlYXJjaCBmaWVsZCdzIFRvcCBBdXRob3JzLUtleXdvcmRzLUpvdXJuYWxzCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KTV90aHJlZWZpZWxkIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RocmVlZmllbGRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTE3LjUsIGZpZy5oZWlnaHQ9MTcuNX0KTV90aHJlZWZpZWxkCmBgYAoKIyBUb3BpYyBtb2RlbGxpbmcgCgoqKk5vdGU6KiogSGVyZSwgd2UgcmVwb3J0IHRoZSByZXN1bHRzIG9mIGEgTERBIHRvcGljLW1vZGVsbGluZyAoYmFzaWNhbGx5LCBjbHVzdGVyaW5nIG9uIHdvcmRzKSBvbiBhbGwgdGl0bGUrYWJzdHJhY3QgdGV4dHMuIElkZW50aWZpZWQgdG9waWNzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBicm9hZCB0aGVtZXMgaW4gdGhlIHJlc2VhcmNoIGZpZWxkLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdGV4dF90aWR5IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfdGlkeV8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCnRleHRfbGRhIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RleHRfTERBXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgCgp0ZXh0X2xkYV9iZXRhIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJiZXRhIikgCnRleHRfbGRhX2dhbW1hIDwtIHRleHRfbGRhICU+JSB0aWR5KG1hdHJpeCA9ICJnYW1tYSIpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc190b3AgPC0gdGliYmxlKCAKICBjb20gPSAxOih0ZXh0X2xkYV9nYW1tYSAlPiUgcHVsbCh0b3BpYykgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdUUCcsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3RwKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdUUCcpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnVFAgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQogICAgICAgICAgICAKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMToodGV4dF9sZGFfZ2FtbWEgJT4lIHB1bGwodG9waWMpICU+JSBuX2Rpc3RpbmN0KCkpKSAgICAgICAgICAgCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnRleHRfbGRhX2JldGEgJTw+JSAgaW5uZXJfam9pbihjb21fbmFtZXNfdG9wICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCd0b3BpYycgPSAnY29tJykpCnRleHRfbGRhX2dhbW1hICU8PiUgaW5uZXJfam9pbihjb21fbmFtZXNfdG9wICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCd0b3BpYycgPSAnY29tJykpCmBgYAoKCiMjIFRvcGljcyBieSB0b3B3b3JkcwoKYGBge3IsIGZpZy53aWR0aD0xNSwgZmlnLmhlaWdodD0xNX0gCnRleHRfbGRhX2JldGEgJT4lCiAgZ3JvdXBfYnkobGFiZWwpICU+JQogIHNsaWNlX21heChiZXRhLCBuID0gMTApICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGVybSA9IHJlb3JkZXJfd2l0aGluKHRlcm0sIGJldGEsIGxhYmVsKSkgJT4lCiAgZ2dwbG90KGFlcyh0ZXJtLCBiZXRhLCBmaWxsID0gZmFjdG9yKGxhYmVsKSkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+IGxhYmVsLCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSAzKSArCiAgY29vcmRfZmxpcCgpICsKICBzY2FsZV94X3Jlb3JkZXJlZCgpICsKICBsYWJzKHggPSAiSW50cmEtdG9waWMgZGlzdHJpYnV0aW9uIG9mIHdvcmQiLAogICAgICAgeSA9ICJXb3JkcyBpbiB0b3BpYyIpICsgCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICJMZWdlbmQiLCB2YWx1ZXMgPSBjb21fbmFtZXNfdG9wICU+JSBwdWxsKGNvbCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKCiNwbG90X2x5IDwtIHBsb3QgJT4lIHBsb3RseTo6Z2dwbG90bHkoKQojaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQocGxvdGx5Ojphc193aWRnZXQocGxvdF9seSksICcuLi9vdXRwdXRcdmlzX3Bsb3RseV90b3BpY190ZXJtcy5odG1sJywgc2VsZmNvbnRhaW5lZCA9IFRSVUUpCmBgYAoKKipOb3RlOioqIFdoaWxlIHRoaXMgc3RhdGljIHZpZXMgaXMgaGVscGZ1bCwgSSByZWNvbW1lbmQgdXNpbmcgdGhlIGludGVyYWN0aXZlIExEQVZpcyB2ZXJzaW9uIHRvIGJlIGZvdW5kIHVuZGVyIGByIHBhc3RlMCgnaHR0cHM6Ly9kYW5pZWwtaGFpbi5naXRodWIuaW8vYmlibGlvX2x1eF8yMDIyL291dHB1dC90b3BpY19tb2RlbGxpbmcvTERBdml6XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy9pbmRleC5odG1sI3RvcGljPTEmbGFtYmRhPTAuNjAmdGVybT0nKWAuIEZvciBmdW5jdGlvbmFsaXR5IGFuZCB1c2FnZSwgc2VlIMK0VGVjaG5pY2FsIMK0LgoKYGBge3IsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0PTcuNX0KdGV4dF9sZGFfZ2FtbWEgJT4lCiAgcmVuYW1lKHdlaWdodCA9IGdhbW1hKSAlPiUKICBsZWZ0X2pvaW4oTSAlPiUgc2VsZWN0KFhYLCBQWSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1hYJykpICU+JQogIG11dGF0ZShQWSA9IGFzLm51bWVyaWMoUFkpKSAlPiUKICBncm91cF9ieShQWSwgbGFiZWwpICU+JSBzdW1tYXJpc2Uod2VpZ2h0ID0gc3VtKHdlaWdodCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JSBtdXRhdGUod2VpZ2h0X1BZID0gc3VtKHdlaWdodCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHdlaWdodF9yZWwgPSB3ZWlnaHQgLyB3ZWlnaHRfUFkpICU+JQogIHNlbGVjdChQWSwgbGFiZWwsIHdlaWdodCwgd2VpZ2h0X3JlbCkgJT4lCiAgZmlsdGVyKFBZID49IFBZX21pbiAmIFBZIDw9IFBZX21heCkgJT4lCiAgYXJyYW5nZShQWSwgbGFiZWwpICU+JQogIHBsb3Rfc3VtbWFyeV90aW1lbGluZSh5MSA9IHdlaWdodCwgeTIgPSB3ZWlnaHRfcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgIGxhYmVsID0gVFJVRSwgcGFsID0gcGFsX3RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJUb3BpYyBwb3B1bGFyaXR5IGFubnVhbHkiLCB5Ml90ZXh0ID0gIlNoYXJlIG9mIHRvcGljIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdUb3BpYyBNb2RlbGxpbmc6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIHRvcGljIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSB0b3BpYyBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CnRleHRfbGRhX2dhbW1hICU+JQogIHJlbmFtZSh3ZWlnaHQgPSBnYW1tYSkgJT4lCiAgaW5uZXJfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZLCBUQ19jb2hvcnRfcmFuaykgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKGludF9kZXB0ID0gVFJVRSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1hYJykpICU+JQogICMgbXV0YXRlKGltcGFjdCA9IHdlaWdodCogVENfY29ob3J0X3JhbmspICU+JQogIG11dGF0ZShpbXBhY3QgPSBUQ19jb2hvcnRfcmFuayA+PSAwLjkpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC41KSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkobGFiZWwsIFBZKSAlPiUKICBzdW1tYXJpc2UoaW1wYWN0ID0gbWVhbihpbXBhY3QpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBQWSwgeSA9IGltcGFjdCwgY29sID0gbGFiZWwpKSArCiAgZ2VvbV9saW5lKCkgKyAKICBnZW9tX3BvaW50KCkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgnVG9waWMgSW1wYWN0OicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kIERlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgeCA9ICdZZWFyJywKICAgICAgICAgICAgICAgICAgeSA9ICdUb3BpYyBJbXBhY3QnLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ1RvcGljIEltcGFjdCByZWZlcnMgdG8gdGhlIHNoYXJlIG9mIHB1YmxpY2F0aW9ucyB3aXRoaW4gdGhlIGNvaG9ydCB0b3AtMTAlIGNpdGVkIHB1YmxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHRvcGljJywKICAgICAgICAgICAgICAgICAgKQpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Kcm0odGV4dF90aWR5LCB0ZXh0X2xkYSkKYGBgCgojIEtub3dsZWRnZSBCYXNlczogQ28tQ2l0YXRpb24gbmV0d29yayBhbmFseXNpcyAKCioqTm90ZToqKiBUaGlzIGFuYWx5c2lzIHJlZmVycyB0aGUgY28tY2l0YXRpb24gYW5hbHlzaXMsIHdoZXJlIHRoZSBjaXRlZCByZWZlcmVuY2VzIGFuZCBub3QgdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9ucyBhcmUgdGhlIHVuaXQgb2YgYW5hbHlzaXMuIElkZW50aWZpZWQga25vd2xlZGdlIGJhc2VzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUga25vd2xlZGdlIGZvdW5kYXRpb24gdGhlIGZpZWxkIGRyYXdzIGZyb20uIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL0NfbndfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19jaXQgPC0gdGliYmxlKCAKICBjb20gPSAxOihDX253ICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdLQicsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX2tiKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdLQicpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnS0IgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQoKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMTooQ19udyAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253ICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQprYl9zdGF0cyA8LSBDX253ICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUKICBzdW1tYXJpc2UobiA9IG4oKSwgZGVuc2l0eV9pbnQgPSAoKHN1bShkZ3JfaW50KSAvIChuKCkgKiAobigpIC0gMSkpKSAqIDEwMCkgJT4lIHJvdW5kKDMpKSAlPiUKICByZWxvY2F0ZShsYWJlbCwgZXZlcnl0aGluZygpKQpgYGAKCmBgYHtyfQprYl9zdW0gPC1DX253ICU+JSBncm91cF9ieShjb20pICU+JSAKICBhcnJhbmdlKGNvbSwgZGVzYyhkZ3JfaW50KSkgJT4lCiAgbXV0YXRlKG5hbWUgPSBuYW1lICU+JSBzdHJfdHJ1bmMoMTUwKSkgJT4lCiAgc2xpY2VfbWF4KG9yZGVyX2J5ID0gZGdyX2ludCwgbiA9IDEwLCB3aXRoX3RpZXMgPSBGQUxTRSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoIG5hbWUsIGRncl9pbnQsIGRncikgJT4lCiAga2FibGUoKSAKCmZvcihpIGluIDE6bnJvdyhjb21fbmFtZXNfY2l0KSl7CiAga2Jfc3VtIDwtIGtiX3N1bSAlPiUKICAgIHBhY2tfcm93cyhwYXN0ZTAoJ0tub3dsZWRnZSBCYXNlICcsIGksICc6ICcsIGNvbV9uYW1lc19jaXRbaSwgJ2xhYmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICcgICAobiA9ICcsIGtiX3N0YXRzW2ksICduJ10sICcsIGRlbnNpdHkgPScsIGtiX3N0YXRzW2ksICdkZW5zaXR5X2ludCddICU+JSByb3VuZCgyKSwgJyknICksIAogICAgICAgICAgICAgIChpKjEwLTkpLCAgKGkqMTApLCBsYWJlbF9yb3dfY3NzID0gImJhY2tncm91bmQtY29sb3I6ICM2NjY7IGNvbG9yOiAjZmZmOyIpIAogIH0KCmtiX3N1bSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZWxfMm0gPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZWxfMm1fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUKICBkcm9wX25hKCkKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNpdF9jb21feWVhciA8LSBlbF8ybSAlPiUKICBjb3VudChjb21fY2l0LCBQWSwgbmFtZSA9ICdUQycpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBtdXRhdGUoVENfcmVsID0gVEMgLyBzdW0oVEMpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShQWSwgY29tX2NpdCkgJT4lCiAgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUgCiAgY29tcGxldGUobGFiZWwsIFBZLCBmaWxsID0gbGlzdChUQyA9IDAsIFRDX3JlbCA9IDApKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CmNpdF9jb21feWVhciAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBUQywgeTIgPSBUQ19yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCBwYWwgPSBwYWxfa2IsIGxhYmVsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJOdW1iZXIgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IiwgIHkyX3RleHQgPSAiU2hhcmUgb2YgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQnNlczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUga25vd2xlZGdlIGJhc2UgYXBwZWFyYW5jZSAobGVmdCksIFJlbGF0aXZlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKHJpZ2h0KScpCmBgYAoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBSZXNlYXJjaCBBcmVhczogQmlibGlvZ3JhcGhpYyBjb3VwbGluZyBhbmFseXNpcwoKKipOb3RlOioqIFRoaXMgYW5hbHlzaXMgcmVmZXJzIHRoZSBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFuYWx5c2lzLCB3aGVyZSBvcmlnaW5hbCBwdWJsaWNhdGlvbnMgYXJlIHRoZSB1bml0IG9mIGFuYWx5c2lzLiBJZGVudGlmaWVkIHJlc2VhcmNoIGFyZWFzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZmllbGQncyBjdXJyZW50IHJlc2VhcmNoIGZyb250aWVyLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KTV9iaWIgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvTV9iaWJfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19iaWIgPC0gdGliYmxlKCAKICBjb20gPSAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpLAogIHR5cGUgPSAnUkEnLAogIGNvbCA9IGNvbSAlPiUgZ2dfY29sb3Jfc2VsZWN0KHBhbCA9IHBhbF9yYSkpICU+JQogIGxlZnRfam9pbihjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnUkEnKSAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9ICdjb20nKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAoJ1JBICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIGxhYmVsKSkKCiMgIyAxc3QgYWx0ZXJuYXRpdmU6IE51bWJlciB0aGVtIDEtbgojIHBhc3RlKHR5cGUsIDE6KE1fYmliICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSkpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpyYV9zdGF0cyA8LSBNX2JpYiAlPiUKICBkcm9wX25hKGNvbSkgJT4lCiAgZ3JvdXBfYnkoY29tLCBsYWJlbCkgJT4lCiAgc3VtbWFyaXNlKG4gPSBuKCksIGRlbnNpdHlfaW50ID0gKChzdW0oZGdyX2ludCkgLyAobigpICogKG4oKSAtIDEpKSkgKiAxMDApICU+JSByb3VuZCgzKSkgJT4lCiAgc2VsZWN0KGNvbSwgbGFiZWwsIGV2ZXJ5dGhpbmcoKSkKYGBgCgpgYGB7cn0KcmFfc3VtIDwtIE1fYmliICU+JSBncm91cF9ieShsYWJlbCkgJT4lIAogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIEFVLCBQWSwgVEksIFRDKSwgYnkgPSAnWFgnKSAlPiUKICBtdXRhdGUoZGdyX3NlbGVjdCA9IChkZ3JfaW50IC8gbWF4KGRncl9pbnQpICogKFRDIC8gbWF4KFRDKSkpICkgJT4lCiAgc2xpY2VfbWF4KG9yZGVyX2J5ID0gZGdyX3NlbGVjdCwgbiA9IDEwLCB3aXRoX3RpZXMgPSBGQUxTRSkgJT4lIAogIG11dGF0ZShUQ195ZWFyID0gKFRDIC8gKDIwMjEgKyAxIC0gUFkpKSAlPiUgcm91bmQoMiksCiAgICAgICAgIGRncl9pbnQgPSBkZ3JfaW50ICU+JSByb3VuZCgyKSwKICAgICAgICAgQVUgPSBBVSAlPiUgc3RyX3RydW5jKDI1KSwKICAgICAgICAgVEkgPSBUSSAlPiUgc3RyX3RydW5jKDEyNSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoQVUsIFBZLCBUSSwgZGdyX2ludCwgVEMsIFRDX3llYXIpICU+JQogIGthYmxlKCkKCgpmb3IoaSBpbiAxOm5yb3coY29tX25hbWVzX2JpYikpewogIHJhX3N1bSAgJTw+JQogICAgcGFja19yb3dzKHBhc3RlMCgnUmVzZWFyY2ggQXJlYSAnLCBpLCAnOiAnLCBjb21fbmFtZXNfYmliW2ksICdsYWJlbCddLAogICAgICAgICAgICAgICAgICAgICAnICAgKG4gPSAnLCByYV9zdGF0c1tpLCAnbiddLCAnLCBkZW5zaXR5ID0nLCByYV9zdGF0c1tpLCAnZGVuc2l0eV9pbnQnXSAlPiUgcm91bmQoMiksICcpJyApLCAKICAgICAgICAgICAgICAoaSoxMC05KSwgIChpKjEwKSwgbGFiZWxfcm93X2NzcyA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2OyBjb2xvcjogI2ZmZjsiKSAKICB9CgpyYV9zdW0gJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9Ck1fYmliICU+JQogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZKSwgYnkgPSAnWFgnKSAlPiUKICBtdXRhdGUoUFkgPSBQWSAlPiUgYXMubnVtZXJpYygpKSAlPiUKICBncm91cF9ieShsYWJlbCwgUFkpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZShuX1BZID0gc3VtKG4pKSAlPiUgdW5ncm91cCgpICU+JQogIG11dGF0ZShuX3JlbCA9IG4gLyBuX1BZKSAlPiUKICBzZWxlY3QobGFiZWwsIFBZLCBuLCBuX3JlbCkgJT4lCiAgYXJyYW5nZShsYWJlbCwgUFkpICU+JSAKICBjb21wbGV0ZShsYWJlbCwgUFksIGZpbGwgPSBsaXN0KG4gPSAwLCBuX3JlbCA9IDApKSAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBuLCB5MiA9IG5fcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfcmEsCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiTnVtYmVyIHB1YmxpY2F0aW9ucyBhbm51YWxseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgcHVibGljYXRpb25zIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZ19hZ2cgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZ19iaWJfYWdnXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJU4+JQogIGFycmFuZ2UoY29tKSAjICU+JQojICAgbXV0YXRlKG5hbWUgPSBuYW1lc19yYSAlPiUgcHVsbChjb21fcmFfbmFtZSksCiMgICAgICAgICAgY29sb3IgPSBjb2xzX3JhKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PSA3LjUsIGZpZy53aWR0aD03LjV9CmdfYWdnICVFPiUgCiAgZmlsdGVyKHdlaWdodCA+IDAgJiBmcm9tICE9IHRvKSAlPiUKICBmaWx0ZXIod2VpZ2h0ID49IHF1YW50aWxlKHdlaWdodCwgMC4yNSkgKSAgJU4+JQogIG11dGF0ZShjb20gPSBjb21fbmFtZXNfYmliICU+JSBwdWxsKGxhYmVsKSkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJjaXJjbGUiKSArIAogIGdlb21fZWRnZV9mYW4oc3RyZW5naHQgPSAwLjgsIGFlcyh3aWR0aCA9IHdlaWdodCksIGFscGhhID0gMC4yKSAgKyAKICBnZW9tX25vZGVfcG9pbnQoYWVzKHNpemUgPSBOLCBjb2xvciA9IGNvbSkpICArIAogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IGNvbSksIHJlcGVsID0gVFJVRSkgKwogICN0aGVtZV9ncmFwaChiYXNlX2ZhbWlseSA9ICJBcmlhbCIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKwogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsMjApKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSBwYWxfcmEpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoJ1Jlc2VhcmNoIEFyZWEgQ29ubmVjdGl2aXR5OicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kIERlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdOb2RlcyA9IElkZW50aWZpZWQgUmVzZWFyY2ggQXJlYXM7IEVkZ2VzOiBCaWJsaW9ncmFwaGljIGNvdXBsaW5nIHN0cmVuZ2h0IChKYWNjYXJkIHdlaWdodGVkKScpCmBgYAoKCiMgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcyAmIFRvcGljcyBJbnRlcmFjdGlvbgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMgTm9kZXMKbmxfM20gPC0gY29tX25hbWVzX2JpYiAlPiUKICBiaW5kX3Jvd3MoY29tX25hbWVzX2NpdCkgJT4lCiAgYmluZF9yb3dzKGNvbV9uYW1lc190b3ApICU+JQogIHJlbmFtZShuYW1lID0gbGFiZWwsCiAgICAgICAgIGNvbV9uciA9IGNvbSkgJT4lCiAgcmVsb2NhdGUobmFtZSkKCiMgRWRnZXMKZWxfMm1fa2IgPC0gZWxfMm0gJT4lCiAgc2VsZWN0KC1mcm9tLCAtdG8pICU+JQogIGlubmVyX2pvaW4oY29tX25hbWVzX2NpdCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9IGMoJ2NvbV9iaWInID0gJ2NvbScpKSAlPiUKICBtdXRhdGUod2VpZ2h0ID0gMSkgJT4lCiAgcmVuYW1lKGZyb20gPSBsYWJlbC54LAogICAgICAgICB0byA9IGxhYmVsLnkpICU+JSAjIGdlbmVyaWMKICBzZWxlY3QoZnJvbSwgdG8sIHdlaWdodCwgY29sKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBjb3VudChmcm9tLCB0bywgY29sLCB3dCA9IHdlaWdodCwgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC4yNSkgJT4lCiAgd2VpZ2h0X2phY2NhcmQoaSA9IGZyb20sIGogPSB0bywgdyA9IHdlaWdodCkgJT4lIAogIHNlbGVjdCgtd2VpZ2h0KQoKZWxfMm1fdG9waWMgPC0gdGV4dF9sZGFfZ2FtbWEgJT4lIHNlbGVjdCgtdG9waWMsIC1jb2wpICU+JQogIGxlZnRfam9pbihNX2JpYiAlPiUgc2VsZWN0KFhYLCBjb20pICU+JSBkcm9wX25hKGNvbSksIGJ5ID0gYygnZG9jdW1lbnQnID0gJ1hYJykpICU+JQogIGlubmVyX2pvaW4oY29tX25hbWVzX2JpYiAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gYygnY29tJyA9ICdjb20nKSkgJT4lCiAgcmVuYW1lKGZyb20gPSBsYWJlbC55LAogICAgICAgICB0byA9IGxhYmVsLngsCiAgICAgICAgIHdlaWdodCA9IGdhbW1hKSAlPiUgIyBnZW5lcmljCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQsIGNvbCkgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgY291bnQoZnJvbSwgdG8sIGNvbCwgd3QgPSB3ZWlnaHQsIG5hbWUgPSAnd2VpZ2h0JykgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuMjUpICU+JQogIHdlaWdodF9qYWNjYXJkKGkgPSBmcm9tLCBqID0gdG8sIHcgPSB3ZWlnaHQpICU+JSBzZWxlY3QoLXdlaWdodCkKCiMgZ3JhcGgKZ18zbSA8LSBlbF8ybV9rYiAlPiUgCiAgYmluZF9yb3dzKGVsXzJtX3RvcGljKSAlPiUKICBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBUUlVFKSAlTj4lCiAgbGVmdF9qb2luKG5sXzNtLCBieSA9ICduYW1lJykgJT4lCiAgbXV0YXRlKAogICAgbGV2ZWwgPSBjYXNlX3doZW4oCiAgICAgIHR5cGUgPT0gIktCIiB+IDEsCiAgICAgIHR5cGUgPT0gIlJBIiB+IDIsCiAgICAgIHR5cGUgPT0gIlRQIiB+IDMpLAogICAgY29vcmRfeSA9IDAuMSwKICAgIGNvb3JkX3ggPSAwLjAwMSArIDEvKG1heChsZXZlbCktMSkgKiAobGV2ZWwtMSkKICAgICkgICVOPiUKICBmaWx0ZXIoIWlzLm5hKGxldmVsKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyMgQnVpbGQgc2Fua2V5IHBsb3QKZmlnIDwtIHBsb3RfbHkodHlwZSA9ICJzYW5rZXkiLCAKICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSAiaCIsCiAgICAgICAgICAgICAgIGFycmFuZ2VtZW50ID0gInNuYXAiLAogIG5vZGUgPSBsaXN0KAogICAgbGFiZWwgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwobmFtZSksCiAgICB4ID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvb3JkX3gpLAogICAgeSA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb29yZF95KSwKICAgIGNvbG9yID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvbCksIAogICAgcGFkID0gNAogICksIAogIGxpbmsgPSBsaXN0KAogICAgc291cmNlID0gKGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbChmcm9tKSkgLTEsCiAgICB0YXJnZXQgPSAoZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKHRvKSkgLTEsCiAgICB2YWx1ZSA9ICBnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwod2VpZ2h0X2phYyksCiAgICBjb2xvciA9IGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb2wpICU+JSBjb2wycmdiKCkgJT4lIGFzLm1hdHJpeCgpICU+JSB0KCkgJT4lIGFzX3RpYmJsZSgpICU+JSAKICAgICAgbXV0YXRlKGNvbF9yZ2IgPSBwYXN0ZTAoJ3JnYmEoJywgcmVkLCAnLCcgLCBncmVlbiwgJywnLCBibHVlLCAnLDAuNzUpJykpICU+JSAgcHVsbChjb2xfcmdiKQogICAgKQopICU+JSAKICBsYXlvdXQodGl0bGUgPSBwYXN0ZSgnS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcyAmIFRvcGljczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICBtYXJnaW4gPSBsaXN0KGwgPSA1MCwgciA9IDUwLCBiID0gMTAwLCB0ID0gMTAwLCBwYWQgPSAyKSkgCmBgYAoKCiMjIEpvaW50IE92ZXJ2aWV3IG92ZXIgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcywgYW5kIFRvcGljcwoKVGhpcyBwbG90IHNob3dzIHRoZSBjb25uZWN0aW9uIG9mIHB1YmxpY2F0aW9ucyBpbiB0aGUgcmVzZWFyY2ggYXJlYXMgdG8ga25vd2xlZGdlIGJhc2VzIChieSBjaXRhdGlvbnMpIGFuZCB0b3BpY3MgKGJ5IGdhbW1hLCBkb2N1bWVudC10b3BpYyB3ZWlnaHQpCgpgYGB7ciwgZmlnLmhlaWdodD0gMTAsIGZpZy53aWR0aD0xNX0KZmlnCmBgYAoKCgojIFRyZW5kcyAKCmBgYHtyfQp1bmlfc2ltIDwtIHJlYWRfcmRzKHBhc3RlMCgnLi4vLi4vdGVtcC91bmlfc2ltXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBMZWFkLUxhZyBBbmFseXNpcyAKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD03LjV9CmRlc2MgPC0gdW5pX3NpbSAlPiUgCiAgZmlsdGVyKEFVX1VOID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkpICU+JQogIG11dGF0ZShkZXNjID0gcGFzdGUwKCdOOiAnLCBuLCAnIFxuJywKICAgICAgICAgICAgICAgICAgICAgICAnU2ltaWxhcml0eSB0byBwYXN0OicsIHNpbV9wYXN0ICU+JSByb3VuZCgyKSwgJyBcbicsCiAgICAgICAgICAgICAgICAgICAgICAgJ1NpbWlsYXJpdHkgdG8gZnV0dXJlOiAnLCBzaW1fZnV0dXJlICU+JSByb3VuZCgyKSwgJyBcbicsCiAgICAgICAgICAgICAgICAgICAgICAgJ0xlYWQtTGFnIFNjb3JlOiAnLCBmdXR1cmVfdHJlbmQgJT4lIHJvdW5kKDIpKSkgJT4lIHB1bGwoZGVzYykKICAKICAKdW5pX3NpbSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBuLCBuID0gMTAwKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzaW1fcGFzdCwgeSA9IHNpbV9mdXR1cmUpKSArCiAgZ2VvbV9tYXJrX2VsbGlwc2UoYWVzKGZpbHRlciA9IEFVX1VOID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCksIGxhYmVsID0gQVVfVU4sIGZpbGwgPSAncmVkMScpLCBkZXNjcmlwdGlvbiA9IGRlc2MpICsgZ3VpZGVzKGZpbGwgPSBGQUxTRSkgKwogICNnZW9tX3BvaW50KGRhdGEgPSB1bmlfc2ltICU+JSBmaWx0ZXIoQVVfVU4gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSksIAogICMgICAgICAgICAgIGFlcyhzaXplID0gbiksIGNvbCA9ICdkYXJrcmVkJykgKyAKICBnZW9tX3BvaW50KGFlcyhzaXplID0gbiwgY29sID0gZnV0dXJlX3RyZW5kKSwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3RleHRfcmVwZWwoIAogICAgZGF0YSA9dW5pX3NpbSAlPiUgc2xpY2VfbWF4KG9yZGVyX2J5ID0gbiwgbiA9IDUpICU+JSBmaWx0ZXIoQVVfVU4gIT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSksICMgRmlsdGVyIGRhdGEgZmlyc3QKICAgIGFlcyhsYWJlbCA9IEFVX1VOKSwKICAgIGJveC5wYWRkaW5nID0gMSwgbWF4Lm92ZXJsYXBzID0gSW5mKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2wgPSAnc25vdzMnKSArCiAgc2NhbGVfY29sb3VyX2dyYWRpZW50KGxvdyA9ICJibHVlIiwgaGlnaCA9ICJyZWQiLCBuYW1lID0gIkxlYWQtTGFnIFNjb3JlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgbGFicyh4ID0gJ1NpbWlsYXJpdHkgdG8gcGFzdCcsCiAgICAgICB5ID0gJ1NpbWlsYXJpdHkgdG8gZnV0dXJlJywKICAgICAgIHRpdGxlID0gcGFzdGUoJ0ZpZWxkIExlYWQtTGFnIEFuYWx5c2lzOicsIHZhcl9pbnN0LCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgIGNhcHRpb24gPSAneCBhbmQgeSBheGlzJykKIyArIGxpbXMoeCA9IGMoMC42MjUsIDAuNzI1KSwgeSA9IGMoMC42MjUsIDAuNzI1KSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgojIENvbGxhYm9yYXRpb24gCgpgYGB7cn0KZWxfaW5zdCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9lbF9pbnN0XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKYGBge3J9CmdfaW5zdCA8LSBlbF9pbnN0ICU+JSBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJUU+JQogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9jaXQgKSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkpCmBgYAoKIyMgQ29sbGFib3JhdGlvbiBuZXR3b3JrIAoKYGBge3IsIGZpZy5oZWlnaHQ9IDEwLCBmaWcud2lkdGg9MTV9CmdfaW5zdCAlTj4lIAogIG11dGF0ZShjZW50ID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCkpICU+JQogIGZpbHRlcihuYW1lID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkgIHwgcmFuaygtY2VudCkgPD0gMTAwICkgJT4lCiAgZ2dyYXBoKGxheW91dCA9ICJmciIpICsgCiAgZ2VvbV9lZGdlX2xpbmsoYWVzKHdpZHRoID0gd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgICAjY29sb3IgPSAuTigpJG5hbWVbZnJvbV0gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSB8IC5OKCkkbmFtZVtmcm9tXSA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpLAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAod2VpZ2h0ID49IHdlaWdodCAgJT4lIHF1YW50aWxlKDAuMjUpKSkKICAgICAgICAgICAgICAgICAsIGFscGhhID0gMC4yNSkgICsgCiAgZ2VvbV9ub2RlX3BvaW50KGFlcyhzaXplID0gY2VudCksIGNvbCA9ICdzdGVlbGJsdWUxJykgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBjZW50LAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAoY2VudCA+PSBjZW50ICAlPiUgcXVhbnRpbGUoMC44KSkpLCByZXBlbCA9IFRSVUUpICsKICAjdGhlbWVfZ3JhcGgoYmFzZV9mYW1pbHkgPSAiQXJpYWwiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsKICBzY2FsZV9lZGdlX3dpZHRoX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgNSkpICArCiAgc2NhbGVfZWRnZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoImdyZXkiLCAicmVkIiksIG5hbWUgPSAnMXN0IGRlZ3JlZScpICsKICBzY2FsZV9zaXplKHJhbmdlID0gYygwLjUsMTApKSAKYGBgCgo=